home *** CD-ROM | disk | FTP | other *** search
Oberon Text | 1995-10-29 | 8.1 KB | 314 lines |
- Syntax10.Scn.Fnt
- Syntax10b.Scn.Fnt
- MODULE AmigaDos; (*shml/cn 24-May-1993 *)
- IMPORT
- SYSTEM, A:=AmigaBase,E:=AmigaExec, U := AmigaUtility;
- CONST
- beginning*=-1;
- dosName*="dos.library";
- end*=1;
- newFile*=1006;
- oldFile*=1005;
- readWrite*=1004;
- objectInUse*=202;
- renameAcrossDevices*=215;
- same*=0;
- sharedLock*=-2;
- ticksPerSecond*=50;
- globalOnly*=8;
- binaryVar*=10;
- dontNullTerm*=11;
- saveVar*=12;
- protDelete*=0;
- protExecute*=1;
- protWrite*=2;
- protRead*=3;
- protArchive*=4;
- protPure*=5;
- protScript*=6;
- Some Pointer without their records
- CommandLineInterfacePtr=LONGINT;
- ProcessId=LONGINT;
- Date*=RECORD
- days*:LONGINT;
- minute*:LONGINT;
- tick*:LONGINT;
- END;
- FileHandlePtr*=LONGINT; (* NOTE: This is a BPTR *)
- FileLockPtr*=LONGINT; (* NOTE: This is a BPTR *)
- FileInfoBlock*=RECORD
- diskKey*:LONGINT;
- dirEntryType*:LONGINT;
- fileName*:ARRAY 108 OF CHAR;
- protection*:SET;
- entryType*:LONGINT;
- size*:LONGINT;
- numBlock*:LONGINT;
- date*:Date;
- comment*:ARRAY 80 OF CHAR;
- ownerUID*:INTEGER;
- ownerGID*:INTEGER;
- reserved*:ARRAY 32 OF CHAR;
- END;
- FileInfoBlockPtr*=LONGINT;
- Process*=RECORD
- task*:E.Task;
- msgPort*:E.MsgPort;
- pad*:INTEGER;
- segList*:LONGINT;
- stackSize*:LONGINT;
- globVec*:LONGINT;
- taskNum*:LONGINT;
- stackBase*:LONGINT;
- result2*:LONGINT;
- currentDir*:FileLockPtr;
- cis*:FileHandlePtr;
- cos*:FileHandlePtr;
- consoleTask*:ProcessId;
- fileSystemTask*:ProcessId;
- cli*:CommandLineInterfacePtr;
- returnAddr*:LONGINT;
- pktWait*:LONGINT;
- windowPtr*:LONGINT;
- homeDir*:FileLockPtr;
- flags*:SET;
- exitCode*:LONGINT;
- exitData*:LONGINT;
- arguments*:LONGINT;
- localVars*:E.MinList;
- shellPrivate*:LONGINT;
- ces*:FileHandlePtr;
- END;
- CONST
- sysDummy*=U.user+32;
- sysInput*=sysDummy+1;
- sysOutput*=sysDummy+2;
- sysASynch*=sysDummy+3;
- sysUserShell*=sysDummy+4;
- sysCustomShell*=sysDummy+5;
- npDummy*=U.user+1000;
- npCloseOutput*=npDummy+7;
- dosBase:LONGINT;
- dosVersion-:INTEGER;
- PROCEDURE AddPart*(VAR dir:ARRAY OF CHAR; filename:ARRAY OF CHAR; size:LONGINT):BOOLEAN;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(dir);
- r.d[2]:=SYSTEM.ADR(filename);
- r.d[3]:=size;
- A.LibCall(dosBase,-882,r);
- RETURN r.d[0]#0;
- END AddPart;
- PROCEDURE Close*(file:FileHandlePtr):BOOLEAN;
- r:A.Regs;
- BEGIN
- r.d[1]:=file;
- A.LibCall(dosBase,-36,r);
- RETURN r.d[0]#0;
- END Close;
- PROCEDURE CurrentDir*(lock: FileLockPtr):FileLockPtr;
- r:A.Regs;
- BEGIN
- r.d[1]:=lock;
- A.LibCall(dosBase,-126,r);
- RETURN r.d[0];
- END CurrentDir;
- PROCEDURE DateStamp*(VAR date:Date);
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(date);
- A.LibCall(dosBase,-192,r);
- END DateStamp;
- PROCEDURE Delay*(w: LONGINT);
- r:A.Regs;
- BEGIN
- r.d[1]:=w;
- A.LibCall(dosBase, -198, r);
- END Delay;
- PROCEDURE DeleteFile*(name:ARRAY OF CHAR):BOOLEAN;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(name);
- A.LibCall(dosBase,-72,r);
- RETURN r.d[0]#0;
- END DeleteFile;
- PROCEDURE DupLockFromFH*(fh:FileHandlePtr):FileLockPtr;
- r:A.Regs;
- BEGIN
- r.d[1]:=fh;
- A.LibCall(dosBase,-372,r);
- RETURN r.d[0];
- END DupLockFromFH;
- PROCEDURE Examine*(lock:FileLockPtr; VAR info:FileInfoBlock):BOOLEAN;
- (* NOTE: info has to be longword aligned. *)
- r:A.Regs;
- BEGIN
- r.d[1]:=lock;
- r.d[2]:=SYSTEM.ADR(info);
- A.LibCall(dosBase,-102,r);
- RETURN r.d[0]#0;
- END Examine;
- PROCEDURE FilePart*(VAR path, fileName: ARRAY OF CHAR);
- TYPE StrPtr = POINTER TO ARRAY 1 OF CHAR;
- VAR r:A.Regs; p
- : StrPtr;
- BEGIN
- [1]:=SYSTEM.ADR(path);
- A.LibCall(dosBase,-870,r
- p := SYSTEM.VAL(StrPtr, r.d
- [0]);
- COPY(p^, fileName)
- END FilePart;
- PROCEDURE GetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):LONGINT;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(name);
- r.d[2]:=buffer;
- r.d[3]:=size;
- r.d[4]:=SYSTEM.VAL(LONGINT,flags);
- A.LibCall(dosBase,-906,r);
- RETURN r.d[0];
- END GetVar;
- PROCEDURE IoErr*():LONGINT;
- r:A.Regs;
- BEGIN
- A.LibCall(dosBase,-132,r);
- RETURN r.d[0];
- END IoErr;
- PROCEDURE Lock*(name:ARRAY OF CHAR; type:LONGINT):FileLockPtr;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(name);
- r.d[2]:=type;
- A.LibCall(dosBase,-84,r);
- RETURN r.d[0];
- END Lock;
- PROCEDURE NameFromFH*(fh:FileHandlePtr; VAR name:ARRAY OF CHAR):BOOLEAN;
- r:A.Regs;
- BEGIN
- r.d[1]:=fh;
- r.d[2]:=SYSTEM.ADR(name);
- r.d[3]:=LEN(name);
- A.LibCall(dosBase,-408,r);
- RETURN r.d[0]#0;
- END NameFromFH;
- PROCEDURE NameFromLock*(lock:FileLockPtr; VAR name:ARRAY OF CHAR):BOOLEAN;
- r:A.Regs;
- BEGIN
- r.d[1]:=lock;
- r.d[2]:=SYSTEM.ADR(name);
- r.d[3]:=LEN(name);
- A.LibCall(dosBase,-402,r);
- RETURN r.d[0]#0;
- END NameFromLock;
- PROCEDURE Open*(name:ARRAY OF CHAR; accessMode:LONGINT):FileHandlePtr;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(name);
- r.d[2]:=accessMode;
- A.LibCall(dosBase,-30,r);
- RETURN r.d[0];
- END Open;
- PROCEDURE Output*():FileHandlePtr;
- r:A.Regs;
- BEGIN
- A.LibCall(dosBase,-60,r);
- RETURN r.d[0];
- END Output;
- PROCEDURE Read*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT;
- r:A.Regs;
- BEGIN
- r.d[1]:=file;
- r.d[2]:=SYSTEM.ADR(buffer);
- r.d[3]:=length;
- A.LibCall(dosBase,-42,r);
- RETURN r.d[0];
- END Read;
- PROCEDURE Rename*(oldName,newName:ARRAY OF CHAR):BOOLEAN;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(oldName);
- r.d[2]:=SYSTEM.ADR(newName);
- A.LibCall(dosBase,-78,r);
- RETURN r.d[0]#0;
- END Rename;
- PROCEDURE SameLock*(lock1,lock2:FileLockPtr):LONGINT;
- r:A.Regs;
- BEGIN
- r.d[1]:=lock1;
- r.d[2]:=lock2;
- A.LibCall(dosBase,-420,r);
- RETURN r.d[0];
- END SameLock;
- PROCEDURE Seek*(file:FileHandlePtr; position,mode:LONGINT):LONGINT;
- r:A.Regs;
- BEGIN
- r.d[1]:=file;
- r.d[2]:=position;
- r.d[3]:=mode;
- A.LibCall(dosBase,-66,r);
- RETURN r.d[0];
- END Seek;
- PROCEDURE SetFileSize*(fh:FileHandlePtr; offset,mode:LONGINT):LONGINT;
- r:A.Regs;
- BEGIN
- r.d[1]:=fh;
- r.d[2]:=offset;
- r.d[3]:=mode;
- A.LibCall(dosBase,-456,r);
- RETURN r.d[0];
- END SetFileSize;
- PROCEDURE SetProtection*(name:ARRAY OF CHAR; mask:SET):BOOLEAN;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(name);
- r.d[2]:=SYSTEM.VAL(LONGINT,mask);
- A.LibCall(dosBase,-186,r);
- RETURN r.d[0]#0;
- END SetProtection;
- PROCEDURE SetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):BOOLEAN;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(name);
- r.d[2]:=buffer;
- r.d[3]:=size;
- r.d[4]:=SYSTEM.VAL(LONGINT,flags);
- A.LibCall(dosBase,-900,r);
- RETURN r.d[0]#0;
- END SetVar;
- PROCEDURE System*(command:ARRAY OF CHAR; VAR tagList:ARRAY OF U.TagItem):LONGINT;
- r:A.Regs;
- BEGIN
- r.d[1]:=SYSTEM.ADR(command);
- r.d[2]:=SYSTEM.ADR(tagList);
- A.LibCall(dosBase,-606,r);
- RETURN r.d[0];
- END System;
- PROCEDURE UnLock*(lock:FileLockPtr);
- r:A.Regs;
- BEGIN
- r.d[1]:=lock;
- A.LibCall(dosBase,-90,r);
- END UnLock;
- PROCEDURE Write*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT;
- r:A.Regs;
- BEGIN
- r.d[1]:=file;
- r.d[2]:=SYSTEM.ADR(buffer);
- r.d[3]:=length;
- A.LibCall(dosBase,-48,r);
- RETURN r.d[0];
- END Write;
- PROCEDURE Init;
- LibraryPtr=POINTER TO E.Library;
- lib:LibraryPtr;
- BEGIN
- dosBase:=E.OpenLibrary(dosName,37);
- IF dosBase=0 THEN HALT(99) END;
- lib:=SYSTEM.VAL(LibraryPtr,dosBase);
- dosVersion:=lib.version;
- END Init;
- BEGIN
- Init;
- END AmigaDos.
-